export interface ICardInfo {
	/**
	 * 操作类型,分别为
	 * read:读取卡的数据
	 * write:写入卡的数据
	 * clear:清楚卡的数据
	 * mifare:读取卡的物理ID
	 */
	operation_type: 'read' | 'write' | 'clear' | 'mifare';
	HotelID: number; // 酒店代码
	Type: number; // 卡类型
	BuildingID: number; // 楼栋编号，取值范围1~99
	FloorID: number; // 楼层编号，取值范转1~99
	RoomID: number; // 客房编号，取值范转1~99
	SubRoomID: number; // 子房0~7的编号, 母门请填0x0F
	Now_SeqId: number; // 一分钟内发卡序号，取值范转0~30
	Now_Year: number; // 发卡时间的年
	Now_Mon: number; // 发卡时间的月
	Now_Day: number; // 发卡时间的日
	Now_Hour: number; // 发卡时间的小时
	Now_Min: number; // 发卡时间的分钟
	End_Year: number; // 失效时间的年
	End_Mon: number; // 失效时间的月
	End_Day: number; // 失效时间的日
	End_Hour: number; // 失效时间的小时
	End_Min: number; // 失效时间的分钟
	Ext0?: number; // 关联房1的楼栋编号
	Ext1?: number; // 关联房1的楼层编号
	Ext2?: number; // 关联房1的客房编号
	Ext3?: number; // 保留参数，请填0x0F
	Ext4?: number; // 关联房2的楼栋编号
	Ext5?: number; // 关联房2的楼层编号
	Ext6?: number; // 关联房2的客房编号
	Ext7?: number; // 保留参数，请填0x0F
	Ext8?: number; // 关联公共门的掩码
	Ext9?: number; // 早餐数量
	Ext10?: number; // 保留参数，请填0
	Ext11?: number; // 保留参数，请填0
	Ext12?: number; // 保留参数，请填0
	Ext13?: number; // 保留参数，请填0
	Ext14?: number; // 保留参数，请填0
	Ext15?: number; // 保留参数，请填0
	ReportLost: number; // 是否新卡取代旧卡标志，1表示是，0表示否
}

export default function sendMessage(params: ICardInfo): Promise<{ code: number, message: string }> {
	return new Promise((resolve, reject) => {
		const evt = document.createEvent("CustomEvent");
		const listener = (res: CustomEventInit) => {
			window.document.body.removeEventListener('koimy-ic-e002', listener);
			const obj = res.detail as {
				code: number;
				message: string;
			};
			if (obj && obj.code) {
				resolve({
					...obj
				});
			} else {
				reject(obj);
			}
		};
		window.document.body.addEventListener('koimy-ic-e002', listener)
		evt.initCustomEvent('koimy-ic-e001', true, false, params);
		document.dispatchEvent(evt);
	});
}